import request from '@/utils/request'

// API响应接口
export interface ApiResponse<T> {
  code: number
  msg: string
  data: T
}

// 文本生成图像请求参数
export interface Txt2ImgRequest {
  prompt: string            // 提示词
  negativePrompt?: string   // 负面提示词
  modelName: string         // 模型名称
  width: number             // 图像宽度
  height: number            // 图像高度
  steps?: number            // 采样步数
  cfgScale?: number         // CFG缩放系数
  seed?: number             // 种子值
  batchSize?: number        // 批量大小
}

// 文本生成图像响应
export interface Txt2ImgResponse {
  id: number                // 记录ID
  taskId: string            // 任务ID
  status: 'pending' | 'processing' | 'success' | 'failed'  // 任务状态
  prompt: string            // 提示词
  negativePrompt?: string   // 负面提示词
  modelName: string         // 模型名称
  width: number             // 图像宽度
  height: number            // 图像高度
  steps?: number            // 采样步数
  cfgScale?: number         // CFG缩放系数
  seed?: number             // 种子值
  samplerName?: string      // 采样器名称
  scheduler?: string        // 调度器
  denoisingStrength?: number // 降噪强度
  modelHash?: string        // 模型哈希
  batchSize?: number        // 批量大小
  restoreFaces?: boolean    // 是否恢复面部
  tiling?: boolean          // 是否平铺
  enableHr?: boolean        // 是否启用高分辨率
  hrScale?: number          // 高分辨率缩放
  hrUpscaler?: string       // 高分辨率放大器
  hrSecondPassSteps?: number // 高分辨率二次通过步数
  generationTime?: number   // 生成耗时(毫秒)
  errorMessage?: string     // 错误信息
  imageUrls?: string | string[]  // 生成的图像URL数组（可能是JSON字符串或已解析的数组）
  imageUrl?: string         // 图像URL（兼容处理）
  createTime: string        // 创建时间
  updateTime: string        // 更新时间
  deleted?: number          // 是否删除
}

// 模型配置接口
export interface ModelConfig {
  id: number                // 模型ID
  modelName: string         // 模型名称
  displayName: string       // 显示名称
  description?: string      // 模型描述
  positivePrompt?: string   // 正面提示词
  negativePrompt?: string   // 负面提示词
  steps: number             // 默认采样步数
  samplerName?: string      // 采样器名称
  scheduler?: string        // 调度器
  cfgScale: number          // 默认CFG缩放系数
  seed?: number             // 默认种子值
  defaultWidth: number      // 默认宽度
  defaultHeight: number     // 默认高度
  modelHash?: string        // 模型哈希
  modelFile?: string        // 模型文件
  version?: string          // 版本
  denoisingStrength?: number // 降噪强度
  batchSize?: number        // 批量大小
  restoreFaces?: boolean    // 是否恢复面部
  tiling?: boolean          // 是否平铺
  enableHr?: boolean        // 是否启用高分辨率
  hrScale?: number          // 高分辨率缩放
  hrUpscaler?: string       // 高分辨率放大器
  hrSecondPassSteps?: number // 高分辨率二次通过步数
  enabled: boolean          // 是否启用
  isDefault?: boolean       // 是否为默认模型（前端计算）
  imageUrl?: string         // 模型示例图片URL
  createTime: string        // 创建时间
  updateTime: string        // 更新时间
  width?: number            // 兼容字段
  height?: number           // 兼容字段
}

// 分页数据接口
export interface PageDTO<T> {
  records?: T[]             // 记录列表
  list?: T[]                // 记录列表(兼容)
  total: number             // 总记录数
  size?: number             // 每页大小
  current?: number          // 当前页码
  pages?: number            // 总页数
}

// 统计信息接口
export interface Statistics {
  totalImages: number       // 总生成图像数
  successImages: number     // 成功生成图像数
  failedImages: number      // 失败图像数
  pendingImages: number     // 待处理图像数
  processingImages: number  // 处理中图像数
  successRate: string       // 成功率
  modelUsage: {             // 模型使用情况
    [key: string]: number
  }
  resolutionUsage: {        // 分辨率使用情况
    [key: string]: number
  }
}

/**
 * 文本生成图像
 * @param data 生成图像请求参数
 * @returns 生成响应
 */
export function generateImage(data: Txt2ImgRequest) {
  return request({
    url: '/api/text2img/generate',
    method: 'post',
    data
  }) as Promise<ApiResponse<Txt2ImgResponse>>
}

/**
 * 检查服务健康状态
 * @returns 服务健康状态
 */
export function checkServiceHealth() {
  return request({
    url: '/api/text2img/health',
    method: 'get'
  }) as Promise<ApiResponse<boolean>>
}

/**
 * 分页查询生成记录
 * @param page 页码
 * @param size 每页大小
 * @param status 状态过滤(可选)
 * @param modelName 模型名称过滤(可选)
 * @returns 分页数据
 */
export function getRecords(page: number = 1, size: number = 10, status?: string, modelName?: string) {
  return request({
    url: '/api/text2img/records',
    method: 'get',
    params: { page, size, status, modelName }
  }) as Promise<ApiResponse<PageDTO<Txt2ImgResponse>>>
}

/**
 * 根据任务ID查询生成记录
 * @param taskId 任务ID
 * @returns 生成记录
 */
export function getRecordByTaskId(taskId: string) {
  return request({
    url: `/api/text2img/records/${taskId}`,
    method: 'get'
  }) as Promise<ApiResponse<Txt2ImgResponse>>
}

/**
 * 获取生成统计信息
 * @returns 统计信息
 */
export function getStatistics() {
  return request({
    url: '/api/text2img/statistics',
    method: 'get'
  }) as Promise<ApiResponse<Statistics>>
}

/**
 * 删除生成记录
 * @param taskId 任务ID
 * @returns 删除结果
 */
export function deleteRecord(taskId: string) {
  return request({
    url: `/api/text2img/records/${taskId}`,
    method: 'delete'
  }) as Promise<ApiResponse<boolean>>
} 